package com.crm.business.admin.service;

import com.alibaba.fastjson.JSONObject;
import com.crm.common.admin.entity.BO.AdminUserBO;
import com.crm.common.auth.entity.AdminUserStatusUpdateBO;
import com.crm.common.ka.core.feign.admin.entity.*;
import com.crm.common.admin.entity.PO.AdminRole;
import com.crm.common.ka.core.entity.BasePage;
import com.crm.common.ka.core.entity.UserInfo;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;
import java.util.Map;

/**
 * @author zhangzhwei
 * 系统管理模块的一些请求
 */
public interface AdminService {

    /**
     * 根据用户ID获取用户信息
     *
     * @param userId 用户ID
     * @return data
     */
    public UserInfo getUserInfo( Long userId);

    /**
     * 根据用户ID获取用户名
     *
     * @param userId 用户ID
     * @return data
     */
    public String queryUserName(  Long userId);


    /**
     * 根据部门ID获取部门名称
     *
     * @param deptId 部门ID
     * @return 结果信息
     */
    public String queryDeptName( Integer deptId);

    /**
     * 根据组织Id获取所有上级名称
     * @param deptId
     * @return
     */
    public String queryAllDeptNameByDeptId( Integer deptId);



    /**
     * 查询部门下属部门
     *
     * @param deptId 上级ID
     * @return data
     */
    public List<Integer> queryChildDeptId( Integer deptId);

    /**
     * 查询该用户下级的用户
     *
     * @param userId 用户ID 0代表全部
     * @return data
     */
    public List<Long> queryChildUserId( Long userId);

    /**
     * 查询企业所有用户
     *
     * @return data
     */
    public List<Long> queryUserList();
    /**
     * 根据名称查询系统配置
     *
     * @param name 名称
     * @return data
     */
    public List<AdminConfigBo> queryConfigByName(String name);

    /**
     * 根据名称查询系统配置
     *
     * @param name 名称
     * @return data
     */
    public AdminConfigBo queryFirstConfigByName(String name);


    /**
     * 根据ids查询用户信息
     *
     * @param ids id列表
     * @return data
     */
    public List<SimpleUser> queryUserByIds( List<Long> ids);


    /**
     * 根据ids查询角色信息
     *
     * @param ids id列表
     * @return data
     */
    public List<SimpleRole> queryRoleByIds( List<Long> ids);





    /**
     * 根据ids查询正常的用户Id
     *
     * @param ids id列表
     * @return data
     */
    public List<Long> queryNormalUserByIds( List<Long> ids);
    /**
     * 根据ids查询用户信息
     *
     * @param userId id
     * @return data
     */
    public SimpleUser queryUserById( Long userId);

    /**
     * 根据ids查询部门信息
     *
     * @param ids id列表
     * @return data
     */
    public List<SimpleDept> queryDeptByIds( List<Integer> ids);

    /**
     * 根据ids查询部门下的用户
     *
     * @param ids id列表
     * @return data
     */
    public List<Long> queryUserByDeptIds( List<Integer> ids);

    /**
     * 根据ids查询部门下的启用状态用户
     *
     * @param ids id列表
     * @return data
     */
    public List<Long> queryEnableUserByDeptIds( List<Integer> ids);

    /**
     * 根据部门ids查询有效用户列表
     *
     * @param ids id列表
     * @return data
     */
    public List<Long> queryNormalUserByDeptIds( List<Integer> ids);

    /**
     * 查询数据权限
     * @param userId 用户ID
     * @param menuId 菜单ID
     * @return 权限
     */
    public Integer queryDataType( Long userId,  Integer menuId);



    /**
     * 查询数据权限
     * @param userId 用户ID
     * @param menuId 菜单ID
     * @return 权限
     */
    public Integer queryMaxDataType( Long userId, Integer menuId);

    /**
     * 查询权限内用户
     * @param userId 用户ID
     * @param realm 菜单标识
     * @return 权限
     */
    public List<Long> queryUserByAuth( Long userId, String realm);

    public Integer queryWorkRole( Integer label);

    /**
     * 根据角色类型查询角色
     * @param type 角色类型
     * @return  type
     */
    public List<Integer> queryRoleByRoleType( Integer type);

    /**
     * 查询当前用户在某个模块下的角色
     * @param type 角色类型
     * @return
     */
    public List<AdminRole> queryRoleByRoleTypeAndUserId( Integer type);

    /**
     * 修改系統配置
     *
     * @param adminConfig 配置实体
     * @return data
     */
    public void updateAdminConfig( AdminConfigBo adminConfig);

    JSONObject auth();

    public Long saveOrUpdateMessage(AdminMessage message );

    public AdminMessage getMessageById( Long messageId);

    public AdminConfigBo queryFirstConfigByNameAndValue(String name, String value);

    public Integer queryMenuId( String realm1,  String realm2,  String realm3);

    public List<Long>  queryUserIdByRealName( List<String> realNames);

    public UserInfo queryLoginUserInfo( Long userId);

    Long queryUserIdByUserName(String userName);

    Integer queryHrmDataAuthType( Integer menuId);

    public List<UserInfo> queryUserInfoList();

    public BasePage<AdminUserEntityVO> queryUserList(AdminUserBO adminUserBO);

    public  List<Long> queryUserListByRoleIds( long[] ids);

    public  List<Long>  queryUserListByDeptIds( long[] ids);

    List<Long> queryChannelSales();

    public List<AdminRole> queryRoleListByUserId( List<Long> userIds);

    /**
     * 根据部门Pid 获取下一级部门
     *
     * @param deptId 部门ID
     * @return 结果信息
     */
    public List<Integer> queryDeptByPid(Integer deptId);

    public List<Long> queryUserIdsByRoleIds();

    /**
     * 通过用户名查询用户
     *
     * @param username 用户名
     * @return 结果信息
     */
    public List<Map<String, Object>> findByUsername( String username);

    /**
     * 通过用户ID查询所属角色
     * @param userId 用户ID
     * @return data
     */
    public List<Integer> queryUserRoleIds( Long userId);

    public void setUserStatus(AdminUserStatusUpdateBO adminUserStatusBO);


    /**
     * 通过用户ID查询没有权限的菜单
     * @date 2020/8/20 15:25
     * @param userId
     * @return 结果信息
     **/
    public List<String>  queryNoAuthMenu( Long userId);

    public List<Long> queryUserIdsByManageDept();

}
